// 获取命令行参数（process.argv：第一个是node路径，第二个是脚本路径，后续是用户参数）
const args = process.argv.slice(2); // 截取用户输入的参数

/**
 * 打印程序使用说明
 */
function printUsage() {
  console.log('=== 命令行表达式计算器使用说明 ===');
  console.log('用法：node calc.js <数学表达式>');
  console.log('示例：');
  console.log('  node calc.js 1+2*3');
  console.log('  node calc.js (10-5)/2');
  console.log('  node calc.js 2^3（注意：^在JS中是异或，幂运算用**，如 2**3）');
  console.log('参数：');
  console.log('  -h / --help  查看使用说明');
  console.log('注意：仅支持基础数学运算，不支持变量（如a+b会报错）');
}

/**
 * 计算数学表达式（安全处理：避免使用eval的风险，此处简化处理）
 * @param {string} expr - 数学表达式
 * @returns {number|string} 计算结果或错误信息
 */
function calculate(expr) {
  try {
    // 替换常见运算符（如^替换为**，适配用户习惯）
    const safeExpr = expr.replace(/\^/g, '**');
    // 使用eval计算（实际项目建议用math.js等库，避免安全风险）
    const result = eval(safeExpr);
    
    // 验证结果是否为数字（排除NaN、Infinity等）
    if (typeof result !== 'number' || isNaN(result) || !isFinite(result)) {
      return '错误：表达式计算结果不是有效数字';
    }
    return result;
  } catch (error) {
    return `错误：无效的数学表达式（${error.message}）`;
  }
}

// 主逻辑：处理命令行参数
console.log('=== 命令行表达式计算器 ===');

// 情况1：无参数或参数为-h/--help → 打印使用说明
if (args.length === 0 || args.includes('-h') || args.includes('--help')) {
  printUsage();
} 
// 情况2：参数多于3个 → 忽略多余参数（仅取第1个表达式）
else if (args.length > 3) {
  console.log(`警告：参数数量过多（共${args.length}个），仅处理第一个参数`);
  const expr = args[0];
  const result = calculate(expr);
  console.log(`表达式：${expr} → 结果：${result}`);
} 
// 情况3：参数正常（1-3个） → 处理第一个参数（表达式）
else {
  const expr = args[0];
  const result = calculate(expr);
  console.log(`表达式：${expr} → 结果：${result}`);
}